/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.foxinline.manager.criar;

import br.com.foxinline.modelo.Grupo;
import br.com.foxinline.modelo.Secretaria;
import br.com.foxinline.modelo.Setor;
import br.com.foxinline.modelo.Usuario;
import br.com.foxinline.servico.GrupoServico;
import br.com.foxinline.servico.SecretariaServico;
import br.com.foxinline.servico.SetorServico;
import br.com.foxinline.servico.UsuarioServico;
import br.com.foxinline.util.Msg;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import org.primefaces.model.DualListModel;

/**
 *
 * @author ely
 */
@ViewScoped
@ManagedBean
public class ManagerCriarUsuario implements Serializable {

    @EJB
    UsuarioServico usuarioServico;
    @EJB
    SetorServico setorServico;
    @EJB
    GrupoServico grupoServico;
    @EJB
    SecretariaServico secretariaServico;
    private Usuario usuario;
    private String senha;
    private Setor setor;
    private List<Setor> setores;
    private Setor setorPesquisar;
    private List<Grupo> grupos;
    private List<Grupo> grupoSelecionado;
    private Boolean login;
    private Secretaria secretariaPesquisar;
    private List<Secretaria> secretarias;
    private DualListModel<Grupo> dualGrupo;
    private List<Grupo> gruposSelec;

    @PostConstruct
    public void init() {
        usuario = new Usuario();
        setor = new Setor();
        setorPesquisar = new Setor();
        setores = new ArrayList<Setor>();
        grupos = grupoServico.pesquisarTodos();
        grupoSelecionado = new ArrayList<Grupo>();
        login = Boolean.FALSE;
        secretariaPesquisar = new Secretaria();
        secretarias = new ArrayList<Secretaria>();

        gruposSelec = new ArrayList<Grupo>();
        dualGrupo = new DualListModel<Grupo>(grupoServico.pesquisarTodos(), gruposSelec);

    }

    public List<Secretaria> todasSecretarias() {
        return secretariaServico.pesquisarTodos();
    }

    public void todosSetoresSec() {
        if (secretariaPesquisar != null) {
            setores = secretariaServico.findSetores(secretariaPesquisar);
        } else {
            setores = new ArrayList<Setor>();
        }
    }

    public void setSetorr(Setor setorr) {
        this.setor = setorr;
    }

    public void existLogin() {
        Usuario u = usuarioServico.existLogin(usuario.getLogin());
        if (u != null) {
            login = Boolean.TRUE;
        } else {
            login = Boolean.FALSE;
        }

        System.err.println(login);
    }

    public void salvar() {
        Usuario u = usuarioServico.existLogin(usuario.getLogin());
        if (u != null) {
            Msg.messagemWarn("Login já existe, informe um novo login");
        } else {
            try {
                if (usuarioServico.usuarioObrigatorio(usuario)) {
                    if (usuarioServico.emailObrigatorio(usuario)) {
//                        if (setorServico.setorObrigatorio(setor)) {
                            if (usuarioServico.senhaObrigatorio(usuario)) {
                                if (usuarioServico.verificaSenha(senha, usuario)) {
//                                if (!grupoSelecionado.isEmpty()) {
                                    if (validaEmail(usuario.getEmail())) {
                                        usuario.setSenha(Usuario.encryptPassword(usuario.getSenha()));
                                        usuario.setSetor(setor);
                                        usuario.setGrupos(dualGrupo.getTarget());

                                        usuario.setAtivo(Boolean.TRUE);
                                        usuarioServico.salvar(usuario);
                                        Msg.messagemInfoRedirect(Msg.SuccessFull, "indexusuario.xhtml");
                                        init();
//                                } else {
//                                    Msg.messagemWarn("Selecione o nível de acesso ");
//                                }
                                    } else {
                                        Msg.messagemError("email inválido (Digite um email válido)");
                                    }
                                } else {
                                    Msg.messagemWarn("Senhas não conferem");
                                }
                            } else {
                                Msg.messagemWarn("O campo senha é Obrigatório");
                            }
//                        } else {
//                            Msg.messagemWarn("O campo setor é obrigatório");
//                        }
                    } else {
                        Msg.messagemWarn("O campo email é obrigatório");
                    }
                } else {
                    Msg.messagemWarn("O campo nome é obrigatório");
                }
            } catch (Exception erro) {
            }
        }
    }

    public boolean validaEmail(String email) {
        Pattern p = Pattern.compile("^[\\w-]+(\\.[\\w-]+)*@([\\w-]+\\.)+[a-zA-Z]{2,7}$");
        Matcher m = p.matcher(email);
        if (m.find()) {
            return true;
        } else {
            return false;
        }
    }

    public Usuario getUsuario() {
        return usuario;
    }

    public void setUsuario(Usuario usuario) {
        this.usuario = usuario;
    }

    public String getSenha() {
        return senha;
    }

    public void setSenha(String senha) {
        this.senha = senha;
    }

    public Setor getSetor() {
        return setor;
    }

    public void setSetor(Setor setor) {
        this.setor = setor;
    }

    public List<Setor> getSetores() {
        return setores;
    }

    public void setSetores(List<Setor> setores) {
        this.setores = setores;
    }

    public Setor getSetorPesquisar() {
        return setorPesquisar;
    }

    public void setSetorPesquisar(Setor setorPesquisar) {
        this.setorPesquisar = setorPesquisar;
    }

    public List<Grupo> getGrupoSelecionado() {
        return grupoSelecionado;
    }

    public void setGrupoSelecionado(List<Grupo> grupoSelecionado) {
        this.grupoSelecionado = grupoSelecionado;
    }

    public List<Grupo> getGrupos() {
        return grupos;
    }

    public void setGrupos(List<Grupo> grupos) {
        this.grupos = grupos;
    }

    public Boolean getLogin() {
        return login;
    }

    public void setLogin(Boolean login) {
        this.login = login;
    }

    public Secretaria getSecretariaPesquisar() {
        return secretariaPesquisar;
    }

    public void setSecretariaPesquisar(Secretaria secretariaPesquisar) {
        this.secretariaPesquisar = secretariaPesquisar;
    }

    public List<Secretaria> getSecretarias() {
        return secretarias;
    }

    public void setSecretarias(List<Secretaria> secretarias) {
        this.secretarias = secretarias;
    }

    public DualListModel<Grupo> getDualGrupo() {
        dualGrupo = new DualListModel<Grupo>(grupoServico.pesquisarTodos(), gruposSelec);
        return dualGrupo;
    }

    public void setDualGrupo(DualListModel<Grupo> dualGrupo) {
        this.dualGrupo = dualGrupo;
    }
}
